/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.pedidos.servidor.dao;

import br.com.pedidos.servidor.entity.Mesa;
import br.com.pedidos.servidor.entity.Pedido;
import br.com.pedidos.servidor.util.Constantes;
import java.util.List;
import javax.persistence.Query;

/**
 *
 * @author Weslley
 */
public class MesaDAO extends BaseDAO<Mesa> {

    public Mesa buscaMesaPorNumero(int numero) {
        try {
            Query query = getEntityManager().createQuery(
                    "SELECT mesa FROM " + Mesa.class.getName() + " mesa WHERE mesa.numero = :numero");
            query.setParameter("numero", numero);

            return (Mesa) query.getSingleResult();
        } catch (Exception e) {

        }
        return new Mesa();
    }

    public List<Mesa> recuperaMesaComPedidosPendenteEmPreparoEPronto() {
        Query query = getEntityManager().createQuery(
                "SELECT DISTINCT pedido.mesa FROM " + Pedido.class.getName() + " pedido WHERE pedido.status = :status1 OR pedido.status = :status2 OR pedido.status = :status3");
        query.setParameter("status1", Constantes.PENDENTE);
        query.setParameter("status2", Constantes.EM_PREPARO);
        query.setParameter("status3", Constantes.PRONTO);

        return (List<Mesa>) query.getResultList();
    }

    @Deprecated
    public List<Mesa> buscaMesasAguardandoConta() {
        Query query = getEntityManager().createQuery(
                "SELECT mesa FROM " + Mesa.class.getName() + " mesa WHERE mesa.background = :background");
        query.setParameter("background", "background-color: " + Constantes.AZUL);

        return (List<Mesa>) query.getResultList();
    }

    @Deprecated
    public List<Mesa> recuperaMesaComPedidosPendentes() {
        Query query = getEntityManager().createQuery(
                "SELECT DISTINCT pedido.mesa FROM " + Pedido.class.getName() + " pedido WHERE pedido.status = :status");
        query.setParameter("status", Constantes.PENDENTE);

        return (List<Mesa>) query.getResultList();
    }

    @Deprecated
    public boolean verificaPedidosPendentesMesa(int numero) {
        Query query = getEntityManager().createQuery(
                "SELECT pedido FROM " + Pedido.class.getName() + " pedido WHERE pedido.mesa.numero = :numero "
                + "AND pedido.status = :status");
        query.setParameter("numero", numero);
        query.setParameter("status", Constantes.PENDENTE);

        if (query.getResultList().isEmpty()) {
            return false;
        }
        return true;
    }

    @Deprecated
    public boolean verificaPedidosPendentesEAtendidosMesa(int numero) {
        Query query = getEntityManager().createQuery(
                "SELECT pedido FROM " + Pedido.class.getName() + " pedido WHERE pedido.mesa.numero = :numero AND (pedido.status = :status1 OR pedido.status = :status2)");
        query.setParameter("numero", numero);
        query.setParameter("status1", Constantes.PENDENTE);
        query.setParameter("status2", Constantes.PRONTO);

        return !query.getResultList().isEmpty();
    }

    @Deprecated
    public boolean verificaQuantidadePedidosPendentesMesa(int numero) {
        Query query = getEntityManager().createQuery(
                "SELECT pedido FROM " + Pedido.class.getName() + " pedido WHERE pedido.mesa.numero = :numero AND pedido.status = :status");
        query.setParameter("numero", numero);
        query.setParameter("status", Constantes.PENDENTE);

        return query.getResultList().isEmpty();
    }

}
